home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MACSHELL
/
MS1
/
COMMANDS
/
PREFS.C
< prev
next >
Wrap
Text File
|
1992-12-02
|
11KB
|
461 lines
/*
* MacShell Source File
*
* Copyright (c) 1989, 1990, 1991, 1992 Suick Bay Technologies. All rights reserved.
*
*
* RESTRICTIONS ON MacShell program and source code.
*
* Ñ╩MacShell¬ is a product of Suick Bay Technologies and is provided for
* restricted use by the owner of the CDROM "Disk to the future II".
*
* Ñ╩No permission is granted for any commercial use without the written
* consent of the Suick Bay Technologies.
*
* Ñ╩No permission is granted for any redistribution of any kind use without
* the written consent of the Suick Bay Technologies.
*
* Ñ╩Permission is granted to use this for any personal noncommercial use.
*
* Ñ╩You may not distribute source or executable code at all, nor may you
* distribute it with or within a commercial product without the written
* consent of the Suick Bay Technologies. Please send modifications to
* the author for inclusion in updates to the program. Thanks.
*
*
* MacShell¬ IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
*
* SUICK BAY TECHNOLOGIES SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY MACSHELL
* OR ANY PART THEREOF.
*
* In no event will Suick Bay Technologies be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Suick Bay Technologies has been advised of the possibility of such damages.
*
* Suick Bay Technologies can be reached at:
*
* 8768 Cottonwood lane
* Maple Grove, MN 55369
* Voice: (612) 425-7025
* AppleLink: D5233
*
*
* No parts of this software may be reproduced or stored in a
* retrieval system or transmitted in any form, or any means,
* electronic, mechanical, photocopying, recording or otherwise,
* without the prior written permission of Suick Bay Technologies.
*
* Spread the word and not the disk.
*
* SPK 012290 : Initial
*/
#include "SystemPub.h"
#include "Proc.h"
#include "ShellPub.h"
#include "Prefs.h"
/*******************************************************************/
enum
{
PrefOk = 1,
PrefCancel,
PrefDefault,
ProfStartUp = 5,
ProfNewShell,
NewItemShell = 9,
NewItemFile,
TextFileCrea = 12,
ShellLimit = 14,
AdvanScroll,
MFBackTasks, /* Not used */
MacOSPath = 18,
UNIXPath,
MSDOSPath,
MinMem = 21,
bootScripts,
caseIns
} PrefDLOGItem;
PrefRec ShellPrefs;
PrefHand PrefsH = NULL;
/*******************************************************************/
DefaultPrefs( PrefPtr pptr )
{
int16 i;
pptr->useProfileStartup = TRUE;
pptr->useProfileNewShell = FALSE;
pptr->newShellOnItem = TRUE;
pptr->useAdvanScroll = FALSE;
pptr->useMFBackTasks = TRUE;
pptr->TextCreator = 'sBAY';
pptr->ShellCharLimit = 32000;
pptr->useMinMem = FALSE;
pptr->useBootScript = FALSE;
pptr->caseIns = TRUE;
pptr->useMacOSPath = FALSE;
pptr->useUNIXPath = TRUE;
pptr->useDOSPath = FALSE;
for( i = 0; i < EXTRAINT; i++ )
pptr->extra[ i ] = 0;
}
/*******************************************************************/
GetShellPrefs()
{
PrefsH = (PrefHand) GetResource( PREFTYPE, PREFSID );
if( PrefsH )
ShellPrefs = **PrefsH;
else
DefaultPrefs( &ShellPrefs );
}
/*******************************************************************/
SavePrefs()
{
if( PrefsH ) /* prefs existed as resource before last call */
{
**PrefsH = ShellPrefs;
ChangedResource( PrefsH );
WriteResource( PrefsH );
}
else /* make a new resource */
{
PrefsH = (PrefHand) New( PrefRec );
if( PrefsH )
{
**PrefsH = ShellPrefs;
AddResource( PrefsH, PREFTYPE, PREFSID, NULL );
WriteResource( PrefsH );
}
}
}
/*******************************************************************/
SetDLOGPrefs( DialogPtr dPtr, PrefPtr pptr )
{
char str[ 64 ];
SetCheck( dPtr, ProfStartUp, pptr->useProfileStartup );
SetCheck( dPtr, ProfNewShell, pptr->useProfileNewShell );
SetCheck( dPtr, NewItemShell, pptr->newShellOnItem );
SetCheck( dPtr, NewItemFile, !(pptr->newShellOnItem) );
/* TextFileCrea */
TypeToStr( pptr->TextCreator, str );
CtoPstr( str );
SetEText (dPtr, TextFileCrea, str );
/* ShellLimit */
NumToString( pptr->ShellCharLimit, str );
SetEText( dPtr, ShellLimit, str );
SetCheck( dPtr, AdvanScroll, pptr->useAdvanScroll );
SetCheck( dPtr, MFBackTasks, pptr->useMFBackTasks );
SetCheck( dPtr, MacOSPath, pptr->useMacOSPath );
SetCheck( dPtr, UNIXPath, pptr->useUNIXPath );
SetCheck( dPtr, MSDOSPath, pptr->useDOSPath );
SetCheck( dPtr, MinMem, pptr->useMinMem );
SetCheck( dPtr, bootScripts, pptr->useBootScript );
SetCheck( dPtr, caseIns, pptr->caseIns );
}
/*******************************************************************/
Boolean DoPREFSDialog()
{
DialogPtr dPtr;
int16 itemHit, check;
PrefRec TempPrefs;
dPtr = GetNewDialog( PREFSDLOG, NULL, -1L );
if( dPtr == NULL )
return;
GetShellPrefs();
TempPrefs = ShellPrefs;
SetArrow();
CenterDialog( dPtr );
OutlineButton( dPtr, 15 );
SetDLOGPrefs( dPtr, &TempPrefs );
while( 1 )
{
ModalDialog( NULL, &itemHit );
switch( itemHit )
{
case PrefDefault :
DefaultPrefs( &TempPrefs );
SetDLOGPrefs( dPtr, &TempPrefs );
/* DrawDialog( dPtr ); */
break;
case ProfStartUp :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useProfileStartup = !check;
break;
case ProfNewShell:
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useProfileNewShell = !check;
break;
case NewItemShell:
case NewItemFile :
pushradiobutton( dPtr, itemHit, NewItemShell, NewItemFile );
GetCheck( dPtr, NewItemShell, &check );
TempPrefs.newShellOnItem = check;
break;
case TextFileCrea:
case ShellLimit :
break;
case AdvanScroll :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useAdvanScroll = !check;
break;
case MFBackTasks :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useMFBackTasks = !check;
break;
case MinMem :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useMinMem = !check;
break;
case bootScripts :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.useBootScript = !check;
break;
case caseIns :
GetCheck( dPtr, itemHit, &check );
SetCheck( dPtr, itemHit, !check );
TempPrefs.caseIns = !check;
break;
case MacOSPath :
case UNIXPath :
case MSDOSPath :
pushradiobutton( dPtr, itemHit, MacOSPath, MSDOSPath );
break;
}
if( itemHit == PrefOk )
{
int32 value;
if( IsTextLegalInt32( 4096L, 512L*1024L, dPtr, ShellLimit, &value ) )
{
ShellPrefs.ShellCharLimit = value; /* save limit */
break;
}
else
SysBeep( 1 );
}
if( itemHit == PrefCancel )
break;
}
if( itemHit == PrefOk ) /* save prefs, note limit checked/saved above ! */
{
char str[ 32 ];
GetEText( dPtr, TextFileCrea, str );
PtoCstr( str );
ShellPrefs.TextCreator = StrToType( str );
GetCheck( dPtr, ProfStartUp, &check );
ShellPrefs.useProfileStartup = check;
GetCheck( dPtr, ProfNewShell, &check );
ShellPrefs.useProfileNewShell = check;
GetCheck( dPtr, NewItemShell, &check );
ShellPrefs.newShellOnItem = check;
GetCheck( dPtr, AdvanScroll, &check );
ShellPrefs.useAdvanScroll = check;
GetCheck( dPtr, MFBackTasks, &check );
ShellPrefs.useMFBackTasks = check;
GetCheck( dPtr, MinMem, &check );
ShellPrefs.useMinMem = check;
GetCheck( dPtr, bootScripts, &check );
ShellPrefs.useBootScript = check;
GetCheck( dPtr, caseIns, &check );
ShellPrefs.caseIns = check;
GetCheck( dPtr, MacOSPath, &check );
ShellPrefs.useMacOSPath = check;
GetCheck( dPtr, UNIXPath, &check );
ShellPrefs.useUNIXPath = check;
GetCheck( dPtr, MSDOSPath, &check );
ShellPrefs.useDOSPath = check;
SavePrefs();
}
DisposDialog( dPtr );
}
/*******************************************************************/
Boolean DoPREFS( int16 ProcToken, WHandle ShellWh, int16 ProcID,
char *string )
{
int16 i, argc;
char *cp, argument[ 256 ];
ShellWindRec **MyShell = (ShellWindRec **) (**ShellWh).thing;
switch( ProcToken )
{
case PROC_INIT :
(**MyShell).Proc[ ProcID ].flags = TRUE;
break;
case PROC_TERM :
case PROC_BREAK :
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
break;
case PROC_STDIN :
if( (**MyShell).Proc[ ProcID ].flags )
{
(**MyShell).Proc[ ProcID ].flags = FALSE;
/* get arguments */
argc = (**MyShell).Proc[ ProcID ].argc;
if( argc > 1 )
{
for( i = 1; i < argc; i++ )
{
GetArgv( ShellWh, ProcID, i, argument );
cp = argument;
if( *cp++ == '-' )
while( *cp )
{
switch( *cp )
{
case 'A' : /* use advanced scroll bars */
case 'a' : /* use advanced scroll bars */
ShellPrefs.useAdvanScroll = (*cp == 'A');
break;
case 'c' : /* Creator */
i++;
if( i < argc )
{
char temp[ 256 ];
GetArgv( ShellWh, ProcID, i, temp );
ShellPrefs.TextCreator = StrToType( temp );
}
break;
case 's' : /* 'New' menu item opens shell */
case 'f' : /* 'New' menu item opens empty file. */
ShellPrefs.newShellOnItem = (*cp == 's');
break;
case 'T' : /* enter key executes commands */
case 't' :
ShellPrefs.useMFBackTasks = (*cp == 'T');
break;
case 'P' : /* use '.profile' on startup */
case 'p' :
ShellPrefs.useProfileStartup = (*cp == 'P');
break;
case 'I' : /* case Insensitive */
case 'i' :
ShellPrefs.caseIns = (*cp == 'I');
break;
case 'N' : /* use '.profile' on newly openned shells */
case 'n' :
ShellPrefs.useProfileNewShell = (*cp == 'N');
break;
case 'l' : /* set character limit on open shells */
i++;
if( i < argc )
{
char temp[ 256 ];
int32 value;
GetArgv( ShellWh, ProcID, i, temp );
CtoPstr( temp );
StringToNum( temp, &value );
ShellPrefs.ShellCharLimit = value;
}
break;
case 'M' : /* Mac OS path */
case 'U' : /* UNIX path */
case 'D' : /* MSDOS path */
ShellPrefs.useMacOSPath = (*cp == 'M');
ShellPrefs.useUNIXPath = (*cp == 'U');
ShellPrefs.useDOSPath = (*cp == 'D');
break;
}
cp++;
}
}
SavePrefs();
}
else
DoPREFSDialog();
/* Tell the shell that we're done */
SendOutToken( ShellWh, ProcID, PROC_BREAK );
/* Turn ourself off */
(**MyShell).Proc[ ProcID ].ProcActive = FALSE;
return( FALSE );
}
}
}